package com.bite.xml_basic_read;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.Iterator;
import java.util.List;

/**
 * 使用dom4j工具来去获取标签对象
 *
 *
 * 总结:
 *    getRootElement():获取根标签对象
 *    通过根标签对象.element("contact") ;获取第一个子节点对象
 *    elements("contact");获取所有同名的子标签对象,返回的是一个集合
 *    element();获取所有的子标签对象
 *    要获取根节点的孙标签对象,首先必须获取它子标签对象,才能孙标签对象
 *
 */
public class Demo2 {
    public static void main(String[] args) throws Exception {
        //1)创建xml文档解析器
        SAXReader reader = new SAXReader();
        //2)读取contact.xml文件
         Document doc
        = reader.read(Demo2.class.getClassLoader().getResource("contact.xml"));

        /**
         * 1.1 获取根标签对象
         * Element getRootElement();获取根标签对象
         */
        Element rootElem = doc.getRootElement();
        System.out.println(rootElem);

        /**
         * 1.2 获取标签的名称:
         *  Element对象中getName()
         */
        System.out.println(rootElem.getName());

        /**
         * 1.3通过根标签对象获取子标签对象
         * 根据标签名称 :默认获取的是第一个子标签对象
         *element("") ;
         *
            */
        Element conElem = rootElem.element("contact");
        System.out.println(conElem);

        System.out.println("---------------------");

        /**
         * 获取子标签对象
         *   获取所有的同名的子标签对象,通过指定标签名称
         */
        List<Element>  conList = rootElem.elements("contact");
        /**
         * 复习:集合的遍历方式
         *  1)普通for循环:size()和get(i)结合
         *  2)迭代器:Iterator
         *  3)foreach:增强for
         */
//        for(int i = 0 ; i <conList.size(); i++){
//            System.out.println( conList.get(i)) ;
//        }

        //增强for
        for(Element e: conList){
            System.out.println(e);
        }
        System.out.println("---------------------");
        //迭代器的方式
       /* Iterator<Element> it =   conList.iterator();
        while(it.hasNext()){//判断是否有下一个可以迭代的元素
            System.out.println(it.next());
        }*/


        /**
         *1.4 获取所有的子标签对象,不指定标签名称
         */
        List<Element> list = rootElem.elements();
        for (Element e: list){
            System.out.println(e);
        }


        /**
         * 1.5 要获取根节点的孙标签对象,首先必须获取它子标签对象,才能孙标签
         */
        Element nameElem = rootElem.element("contact").element("name");
        System.out.println(nameElem);

        /**
         * 在xml文件中 空格和换行是可以被解析出来的
         * java代码中空格和换行只是为了代码风格
         */
        //文本内容
//        System.out.println(rootElem.getText()) ;







    }
}
